using System;
using System.IO;

/*
委托 printString 可用于引用带有一个字符串作为输入的方法，并不返回任何东西。
我们使用这个委托来调用两个方法，第一个把字符串打印到控制台，第二个把字符串打印到文件：
*/
namespace DelegateAppl
{
  class PrintString
  {
    static FileStream fs;
    static StreamWriter sw;
    // 委托声明
    public delegate void printString(string s);

    // 该方法打印到控制台
    public static void WriteToScreen(string str)
    {
      Console.WriteLine("The String is: {0}", str);
    }
    // 该方法打印到文件
    public static void WriteToFile(string s)
    {
      fs = new FileStream("c:\\message.txt", FileMode.Append, FileAccess.Write);
      sw = new StreamWriter(fs);
      sw.WriteLine(s);
      sw.Flush();
      sw.Close();
      fs.Close();
    }
    // 该方法把委托作为参数，并使用它调用方法
    public static void sendString(printString ps)
    {
      ps("Hello World");
    }
    static void Main(string[] args)
    {
      printString ps1 = new printString(WriteToScreen);
      printString ps2 = new printString(WriteToFile);
      sendString(ps1);
      sendString(ps2);
      Console.ReadKey();
    }
  }
}